//在index.js中引入axios
import axios from 'axios';
//arco-design的message提示组件.
import { Message } from '@arco-design/web-react';

import { BASE_URL, TIMEOUT } from "./config";
//设置axios基础路径
const service= axios.create({
  baseURL: BASE_URL,
  timeout: TIMEOUT
});

// 请求***
service.interceptors.request.use(config => { 
  // 每次发送请求之前本地存储中是否存在token，也可以通过Redux这里只演示通过本地拿到token
  // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
  // 即使本地存在token，也有可能token是过期的，所以在响应***中要对返回状态进行判断 
  const token = window.localStorage.getItem('token') || window.sessionStorage.getItem('token');
  //在每次的请求中添加token
  // config.data = Object.assign(config.data)
  //设置请求头
  config.headers = {
    'Content-Type': 'application/json; charset=utf-8',
    'token': token,
  }
  if(config.method === 'get'){
    //去除多余的&
    config.url = config.url.substring(0, config.url.length - 1)
  }
  //序列化请求参数，不然post请求参数后台接收不正常
  // config.data = QS.stringify(config.data)
  return config
}, error => { 
    return error;
})

// 响应***
service.interceptors.response.use(response => {
  //根据返回不同的状态码做不同的事情
  // 这里一定要和后台开发人员协商好统一的错误状态码
  if (response.code) {
    switch (response.code) {
      case 0:
        return response.data;
      case 401:
        //未登录处理方法
        break;
      case 403:
        //token过期处理方法
        break;
      default:
        Message.error(response.data.msg)
    }
  } else { 
    return response;
  }
},error=>{
  Message.error(error.message)
})
//最后把封装好的axios导出
export default service